﻿using JQData.Core.DataModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static JQData.Application.Apis.HotMoneyApi;

namespace JQData.Application.Helper
{
    public static class StockHelper
    {
       
            /// <summary>
            /// 
            /// </summary>
            /// <param name="response"></param>
            /// <returns></returns>
            public static (decimal averageCost, decimal remainingShares) 
            CalculatePositionCost(
                HotMoneyStockData response)
            {
                // 初始化持仓状态
                decimal totalShares = 0;      // 总持仓数量
                decimal totalCost = 0;        // 总持仓成本（按买入价计算）
                decimal realizedProfit = 0;   // 已实现利润（卖出产生的盈亏）

                // 处理所有买入操作
                foreach (var buy in response.BuyInfo)
                {
                    // 买入操作：增加持仓和成本
                    totalShares += buy.Vol;
                    totalCost += buy.Amount;  // Amount = Vol * Price
                }

                // 处理所有卖出操作
                foreach (var sell in response.SellInfo)
                {
                    //if (totalShares <= 0)
                    //{
                    //    throw new InvalidOperationException("卖出操作时持仓不足");
                    //}

                    if (totalShares == 0) {
                        continue;
                    }

                    // 计算当前持仓的平均成本
                    decimal currentAvgCost = totalCost / totalShares;

                    // 计算本次卖出数量（不能超过持仓）
                    decimal sellVolume = Math.Min(sell.Vol, totalShares);

                    // 更新持仓数量
                    totalShares -= sellVolume;

                    // 计算卖出部分的成本
                    decimal costOfGoodsSold = currentAvgCost * sellVolume;

                    // 更新总成本
                    totalCost -= costOfGoodsSold;

                    // 计算并记录已实现盈亏
                    decimal sellValue = sell.Price * sellVolume;
                    realizedProfit += (sellValue - costOfGoodsSold);
                }

                // 计算最终持仓成本
                decimal finalAvgCost = totalShares > 0 ? totalCost / totalShares : 0;

                return (finalAvgCost, totalShares);
            }
        }

}
